# -*- coding: utf-8 -*-
"""
Created on Fri Feb  4 18:25:29 2011

@author: das_netz

Este modulo toma una plantilla svg obtiene los datos de un archivo svg
procesando la primer fila de ese archivo como encabezado, tomando los 
datos de esa fila como nombre de campo de los datos
"""


import re, subprocess

    
class Reporte:
    def __init__(self):        
        self.header = 0
        self.archivoDatos = 0
        self.archivoPlantilla = 0 
        import doctest
        doctest.testmod()       
    
    def __abrirArchivo(self,Archivo):
        archivo = open(Archivo,"r")   
        return archivo        
            
    def __abrirPlantilla(self,archivoPlantilla):
        self.archivoPlantilla = self.__abrirArchivo(archivoPlantilla)
    
    def __abrirDatos(self,archivoDatos):
        self.archivoDatos = self.__abrirArchivo(archivoDatos)
    
    def __obtieneHeader(self):        
        archivoHeader = self.archivoDatos        
        linea = archivoHeader.readline() 
        linea = re.sub('\n','',linea)
        self.header = linea.split(',')  
        
    def __sustituye(self,camposClave):                              
        contenidoOriginal = self.archivoPlantilla.read()         
        while True:            
            contenidoDestino = contenidoOriginal
            linea = self.archivoDatos.readline()
            if not linea: break
            datos = linea.split(',')
            tamanioHeader = len(self.header)
            archivoDestino=""
            for i in range(tamanioHeader):
                patron = "{{"+self.header[i]+"}}"
                reemplazo = datos[i]                                           
                contenidoDestino = re.sub(patron,reemplazo,contenidoDestino)
                for campo in camposClave:                    
                    if campo == self.header[i]:
                        archivoDestino = datos[i]+"_"+archivoDestino
            archivoDestino = archivoDestino
            self.__escribeArchivo(archivoDestino,contenidoDestino)                              
    
    def __escribeArchivo(self,nombreArchivo,contenidoDestino):
        nombreArchivo = re.sub(" ","_",nombreArchivo)
        archivoDestino = open(nombreArchivo+".svg","w")            
        archivoDestino.write(contenidoDestino)
        archivoDestino.close() 
        self.__conviertePDF(nombreArchivo) 
        borrarSVG ="rm "+nombreArchivo+".svg"
        subprocess.call(borrarSVG,shell=True)
    
    def __conviertePDF(self,nombreArchivo):
        comando = "inkscape --without-gui "
        comando = comando + nombreArchivo + ".svg "
        comando = comando + "--export-pdf="
        comando = comando + nombreArchivo+".pdf"
        print comando
        subprocess.call(comando,shell=True)
        
        
    def generaDocumento(self,archivoDatos,archivoPlantilla,camposClave):
        self.__abrirDatos(archivoDatos)
        self.__obtieneHeader()
        self.__abrirPlantilla(archivoPlantilla) 
        self.__sustituye(camposClave)  
        
if __name__ == "__main__":
    import doctest
    doctest.testmod()    